package com.qili.service.supervisor;

import com.qili.base.service.BaseService;
import com.qili.entity.supervisor.SupervisorProject;
import com.qili.entity.supervisor.SupervisorProjectMilepost;
import com.qili.entity.supervisor.SupervisorProjectStage;
import com.qili.entity.supervisor.dto.SupervisorProjectDTO;
import com.qili.util.JsonUtil;
import com.qili.util.ReType;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.List;

/**
 * @author zhaoyongke
 * @date 2020/10/27
 * @description
 */
public interface SupervisorProjectService extends BaseService<SupervisorProject, String> {

    public JsonUtil del(String id);

    public JsonUtil updateDel(SupervisorProject supervisorProject);

    public JsonUtil updateByPrimaryKeyIds(String[] ids, String status);
    /**
     * @param dto
     * @Author:zhaoyongke
     * @Description: 查询项目
     * @Date:15:48 2020/11/26
     */
    List<SupervisorProjectDTO> selectSupervisorProject(SupervisorProjectDTO dto);
    List<SupervisorProjectDTO> selectSupervisorProjectOrder(SupervisorProjectDTO dto);


    /* *
     * @Author liuyang
     * @Date 18:13 2020/12/5
     * @Description             阶段完成后更改项目状态
     * @Param projectId         项目id
     * @Param newStatus         新状态
     * @return void
     */
    void updateProjectStatusAfterStageFinish(SupervisorProjectStage stage);

    /* *
     * @Author liuyang
     * @Date 18:13 2020/12/5
     * @Description             里程完成后更改项目状态
     * @Param projectId         项目id
     * @Param newStatus         新状态
     * @return void
     */
    void updateProjectStatusAfterMilepostFinish(SupervisorProjectMilepost milepost);

    /** *
     * @Author liuyang
     * @Date 18:57 2020/12/5
     * @Description
     * @return java.util.List<java.lang.String>         需要根据监理合同额动态显示的里程的badt_code
     */
    List<String> getDisplayShowMilpostCodes();

    /* *
     * @Author liuyang
     * @Date 11:05 2020/12/6
     * @Description
     * @Param obj       如果是阶段完成事件,这里传过来的是阶段对象,如果是里程完成,阶段未完成,这里传过来的是里程对象
     * @return void
     */
    BigDecimal calProgress(Object obj,String logtext) throws ParseException;

    int deleteProjectsFromRecycle(String[] id);

    public String getUserRole(String fileId);

    /**
     * 比较新老数据并  留痕修改的值
     * @param oldProjectInfo
     * @param newProjectInfo
     */
    void updateCompareProject(SupervisorProject oldProjectInfo, SupervisorProject newProjectInfo,String userId) throws Exception;

    /**
     * 根据项目id获取项目相关信息
     * @param
     * @return
     */
    SupervisorProjectDTO getOldProjectInfo(SupervisorProjectDTO oldProjectDto);
    /**
     * @Author:zhaoyongke
     * @Description:
    * @param stas
     * @Date:15:20 2021/2/25
     */
    public List<SupervisorProjectDTO> selectProList(String[] stas);
    /**
    * @Author:zhaoyongke
    * @Description:
     * @param stage
     * @param milepost
     * @param jisuantype
     * @Date:15:32 2021/2/25
     */
    public String updategetLcStatus(SupervisorProjectStage stage, SupervisorProjectMilepost milepost, String jisuantype) throws Exception;
    public void addPalce(SupervisorProjectDTO supervisorProjectDTO ) throws Exception;

    /**
     * @Author:zhaoyongke
     * @Description: 监理统计台账
     * @param dto
     * @Date:13:30 2021/5/11
     */
    public  List<SupervisorProjectDTO> selectSupervisorJlTjProject(SupervisorProjectDTO dto);


    // 产品分析
    public   List<SupervisorProjectDTO>  selectCpFx(SupervisorProjectDTO dto);
    // 型号分析
    public   List<SupervisorProjectDTO>  selectCpFxDetail(SupervisorProjectDTO dto);

    //产品名称
    public  List<SupervisorProjectDTO>  selectCpName(SupervisorProjectDTO dto);
    //价格分析
    public  List<SupervisorProjectDTO>  selectJgFx(SupervisorProjectDTO dto);

    // 最低最高价 项目名称
    public  List<SupervisorProjectDTO>  selectJgPro(SupervisorProjectDTO dto);
    // 最低最高价 建设单位
    public List<SupervisorProjectDTO>  selectJgJsDw(SupervisorProjectDTO dto);
    // 项目完成率
    public List<SupervisorProjectDTO>  selectProFinishLv(SupervisorProjectDTO dto);
    //通过阶段和里程 获取 里程结束时间
    public String getPayMiseNoDate(SupervisorProjectStage stage, SupervisorProjectMilepost milepost);

    void resetProgress(String id);

    List<SupervisorProjectDTO> showSupervisorListApp(SupervisorProjectDTO supervisorProjectDTO);

    SupervisorProjectDTO selectSupervisorDetailApp(SupervisorProjectDTO supervisorProjectDTO);

    void updateById(String xmId, String num);
     void insertFileLog(String content,String  text,String id);
}
